import 'dart:async';
import 'package:demo/event/event_message.dart';
import 'package:demo/event/event_setting.dart';
import 'package:demo/views/base/base_controller.dart';
import 'package:demo/tools/tools_enum.dart';
import 'package:demo/tools/tools_sqlite.dart';
import 'package:demo/tools/tools_storage.dart';

class MsgIndexController extends BaseController {
  String userId = ToolsStorage().local().userId;
  final Map<String, ChatMsg> _dataMap = {};

  // 不显示
  Future<void> setShow(String chatId) async {
    // 删除
    await ToolsSqlite().msg.delete(chatId);
    // 移除
    refreshList.remove(_dataMap[chatId]);
    // 刷新
    update();
  }

  // 删除
  Future<void> setDelete(String chatId, ChatTalk chatTalk) async {
    // 删除消息
    await ToolsSqlite().extend.clearMsg(chatId);
    // 移除消息
    refreshList.remove(_dataMap[chatId]);
    // 刷新
    update();
  }

  // 消息刷新
  _onRefresh() async {
    // 更新
    refreshList = await ToolsSqlite().msg.getList();
    for (ChatMsg data in refreshList) {
      _dataMap[data.chatId] = data;
    }
    update();
  }

  @override
  void onInit() {
    super.onInit();
    // 监听消息
    _listenMessage();
    // 监听设置
    _listenSetting();
    // 消息刷新
    _onRefresh();
    // 定时任务
    _listenTimer();
  }

  // 监听设置（处理最新通知/处理消息刷新）
  _listenSetting() {
    // 监听通知
    eventStream = EventSetting().event.stream.listen((model) {
      if (SettingType.message == model.setting) {
        // 消息刷新
        _onRefresh();
      }
    });
  }

  // 监听消息（当有新消息，显示到消息顶部）
  _listenMessage() {
    subscription = EventMessage().listenMsg.stream.listen((chatMsg) {
      // 移除
      refreshList.remove(_dataMap[chatMsg.chatId]);
      // 插入
      _dataMap[chatMsg.chatId] = chatMsg;
      refreshList.add(chatMsg);
      // 更新
      update();
    });
  }

  // 定时任务（每间隔1分钟，刷新一次页面时间显示）
  _listenTimer() {
    refreshTimer?.cancel();
    refreshTimer = Timer.periodic(const Duration(minutes: 1), (timer) {
      update();
    });
  }
}
